package org.jflame.auth.authc.assist;

/**
 * 登录失败计数
 * 
 * @author charles.zhang
 */
public abstract class FailureCounter {

    protected int maxFailures = 6;

    public FailureCounter(int maxFailures) {
        if (maxFailures > 0) {
            this.maxFailures = maxFailures;
        }
    }

    /**
     * 增加失败次数并检查是否超过限制
     * 
     * @param account
     * @return 超过限制返回true
     */
    public boolean incrementAndCheck(String account) {
        int i = increment(account);
        return i > maxFailures;
    }

    /**
     * 检查是否超过限制
     * 
     * @param account
     * @return true=超限
     */
    public boolean isLimited(String account) {
        return getFailures(account) > maxFailures;
    }

    /**
     * 清除记录
     * 
     * @param account
     */
    public abstract void clear(String account);

    /**
     * 获取账号登录失败次数
     * 
     * @param account
     * @return
     */
    public abstract int getFailures(String account);

    /**
     * 增加一次失败次数
     * 
     * @param account
     * @return 返回增加后的值
     */
    protected abstract int increment(String account);

}
